﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
// 1、这里只是以ocr为例，其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称，能力名可参考对应API文档中的Action参数。例如您想使用通用分割，其文档为https://help.aliyun.com/document_detail/151960.html，可以知道该能力属于分割抠图类目，能力名称为SegmentCommonImage，那么您需要将代码中Ocr20191230改为Imageseg20191230，将RecognizeBankCard改为SegmentCommonImage。
using AlibabaCloud.SDK.Ocr20191230.Models;
using Tea;
using Tea.Utils;
using static System.Net.WebRequestMethods;

namespace AliYun_RenLian_Obj
{
    internal class Sample_RES_HTTP
    {
        /**
         * 使用AK&SK初始化账号Client
         * @param accessKeyId
         * @param accessKeySecret
         * @return Client
         * @throws Exception
         */
        public static AlibabaCloud.SDK.Ocr20191230.Client CreateClient(string accessKeyId, string accessKeySecret)
        {
            //初始化配置对象AlibabaCloud.OpenApiClient.Models.Config。Config对象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = accessKeyId,
                AccessKeySecret = accessKeySecret,
            };
            // 2、访问的域名。注意：这个地方需要求改为相应类目的域名，参考：https://help.aliyun.com/document_detail/143103.html
            config.Endpoint = "ocr.cn-shanghai.aliyuncs.com";
            // 3、这里只是以ocr为例，其他能力请使用相应类目的包下面的Client类
            return new AlibabaCloud.SDK.Ocr20191230.Client(config);
        }

        public Res_msg Main2(string File_Url)
        {
            Res_msg res_Msg = new Res_msg();
            res_Msg.code = 1;
            try
            {
                // 4、创建AccessKey ID和AccessKey Secret，请参考https://help.aliyun.com/document_detail/175144.html。
                // 如果您用的是RAM用户的AccessKey，还需要为RAM用户授予权限AliyunVIAPIFullAccess，请参考https://help.aliyun.com/document_detail/145025.html。
                // 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行示例前必须先配置环境变量。
                // 这里只是以ocr为例，其他能力请使用相应类目的包下面的Client类
                AlibabaCloud.SDK.Ocr20191230.Client client = CreateClient(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));            // 5、这里只是以ocr下的RecognizeBankCard为例，其他能力请使用相应类目的包和类，具体入参设置需要参考具体能力的文档
                AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardAdvanceRequest recognizeBankCardAdvanceRequest = new AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardAdvanceRequest();
                /* 场景一，使用本地文件 */
                System.IO.StreamReader file = new System.IO.StreamReader(File_Url);
                recognizeBankCardAdvanceRequest.ImageURLObject = file.BaseStream;

                // 场景二，使用任意可访问的url
                //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg");
                //WebResponse response = request.GetResponse();
                //Stream stream = response.GetResponseStream();
                //recognizeBankCardAdvanceRequest.ImageURLObject = stream;
                AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                try
                {
                    // 6、这里只是以ocr下的RecognizeBankCard为例，其他能力请使用相应类目的包和类，注意，RecognizeBankCardAdvance方法名也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的，如能力名称为SegmentCommonImage，对应方法名应该为SegmentCommonImageAdvance。
                    AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardResponse recognizeBankCardResponse = client.RecognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime);
                    // 获取整体结果
                    Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(recognizeBankCardResponse.Body));
                    // 获取单个字段，这里只是一个例子，具体能力下的字段需要看具体能力的文档
                    Console.WriteLine(recognizeBankCardResponse.Body.Data.CardNumber);
                    return res_Msg;
                }
                catch (TeaException error)
                {
                    // 如有需要，请打印 error
                    Console.WriteLine(error.Message);
                    res_Msg.code = 0;
                    res_Msg.Message = error.Message;
                    return res_Msg;
                }
                catch (Exception _error)
                {
                    TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                    // 如有需要，请打印 error
                    Console.WriteLine(error.Message);
                    res_Msg.code = 0;
                    res_Msg.Message = error.Message;
                    return res_Msg;
                }
            }
            catch (Exception)
            {
                res_Msg.code = 0;
                return res_Msg;
            }

        }
    }
}
